package org.csu.jpetstore.bo;

import lombok.Data;
import org.csu.jpetstore.entity.LineItem;
import org.csu.jpetstore.entity.OrderStatus;
import org.csu.jpetstore.vo.LineItemVO;

import java.math.BigDecimal;

/**
 * @author huangzhangyan
 */
@Data
public class LineItemBO {
    private Integer lineItemId;
    private Integer orderId;
    private Integer lineNumber;
    private String itemId;
    private Integer quantity;
    private BigDecimal listPrice;

    /**
     * order_status表中
     */
    private java.sql.Date timeStamp;
    private String status;

    private LineItemBO(LineItem lineItem, OrderStatus orderStatus) {
        this.lineItemId = lineItem.getLineItemId();
        this.orderId = lineItem.getOrderId();
        this.lineNumber = lineItem.getLineNumber();
        this.itemId = lineItem.getItemId();
        this.quantity = lineItem.getQuantity();
        this.listPrice = lineItem.getListPrice();

        this.timeStamp = orderStatus.getTimeStamp();
        this.status = orderStatus.getStatus();
    }

    private LineItemBO(LineItemVO lineItemVO) {
        this.itemId = lineItemVO.getItemId();
        this.quantity = lineItemVO.getQuantity();
        this.lineNumber = lineItemVO.getLineNumber();
        this.listPrice = lineItemVO.getListPrice();

        this.timeStamp = lineItemVO.getTimeStamp();
        this.status = lineItemVO.getStatus();
    }

    public static LineItem toLineItem(LineItemBO lineItemBO) {
        LineItem lineItem = new LineItem();
        lineItem.setLineItemId(lineItemBO.getLineItemId() == null ? null : lineItemBO.getLineItemId());
        lineItem.setOrderId(lineItemBO.getOrderId());
        lineItem.setLineNumber(lineItemBO.getLineNumber());
        lineItem.setItemId(lineItemBO.getItemId());
        lineItem.setQuantity(lineItemBO.getQuantity());
        lineItem.setListPrice(lineItemBO.getListPrice());
        return lineItem;
    }

    public static OrderStatus toOrderStatus(LineItemBO lineItemBO) {
        OrderStatus orderStatus = new OrderStatus();
        orderStatus.setOrderId(lineItemBO.getOrderId());
        orderStatus.setLineNumber(lineItemBO.getLineNumber());
        orderStatus.setTimeStamp(lineItemBO.getTimeStamp());
        orderStatus.setStatus(lineItemBO.getStatus());
        return orderStatus;
    }

    public static LineItemBO toLineItemBO(LineItem lineItem, OrderStatus orderStatus) {
        if (lineItem == null || orderStatus == null)
            return null;
        return new LineItemBO(lineItem, orderStatus);
    }

    public static LineItemBO toLineItemBO(LineItemVO lineItemVO) {
        if (lineItemVO == null)
            return null;
        return new LineItemBO(lineItemVO);
    }

    public static LineItemVO toLineItemVO(LineItemBO lineItemBO) {
        if (lineItemBO == null)
            return null;
        LineItemVO lineItemVO = new LineItemVO();
        lineItemVO.setLineNumber(lineItemBO.getLineNumber());
        lineItemVO.setItemId(lineItemBO.getItemId());
        lineItemVO.setQuantity(lineItemBO.getQuantity());
        lineItemVO.setListPrice(lineItemBO.getListPrice());
        lineItemVO.setTimeStamp(lineItemBO.getTimeStamp());
        lineItemVO.setStatus(lineItemBO.getStatus());
        return lineItemVO;
    }
}
